查看原文
其他

【图像分割模型】用BRNN做分割—ReSeg

孙叔桥 有三AI 2020-09-07

这是专栏《图像分割模型》的第9篇文章。在这里,我们将共同探索解决分割问题的主流网络结构和设计思想。


尽管许多人都知道RNN在处理上下文上多优于CNN,但如何将RNN用于分割任务还是值得讨论一下。本文我们就来聊聊用BRNN做分割的ReSeg。


作者 | 孙叔桥

编辑 | 言有三


本期论文

ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation


1 简单说说BRNN

(1) 什么是循环神经网络


不同于卷积神经网络(CNN,Convolutional Neural Network)通常以图块(patches)为输入,循环神经网络(RNN,Recurrent Neural Network)的输入是序列形式的。即使在处理图像时,通常也需要对图像矩阵进行展开(flatten)操作,再应用RNN。输入序列数据后,RNN在序列的演进方向递归所有节点,并将其定向链式连接。


下图是一个简单的RNN单元示意图:


(2) 为什么要用RNN


尽管CNN在处理多维数据(如图像)时的表现相当不错,但是其需要依赖人工指定的核函数来完成计算,因此在处理上下文信息的时候受到了限制。相反,RNN本身拓扑结构的设计,使得其能够利用内部记忆处理任意时序的输入序列,从而在长短时间间隔序列的处理上比CNN更具优势。


(3) 什么是BRNN


BRNN是双向循环神经网络(Bi-directional RNN)的缩写,属于循环神经网络的一种。基础RNN只能依据之前时刻的时序信息来预测下一时刻的输出,但是有些问题中需要联系上之前和未来状态,共同进行预测。BRNN由两个方向不同的RNN堆叠而成,同时处理过去和未来信息。下图是BRNN的示意图:


2 ReSeg:用BRNN做分割

ReSeg是基于图像分割模型ReNet提出的。因此,我们首先来看一下ReNet。下图是ReNet的运算示意图:

如图所示,ReNet由两层顺序排列的RNN构成。在给定输入图像(或前层)特征后,ReNet对展开结果分别按列、按行扫描。每个扫描过程由两个相反方向的RNN运算单元实现。具体公式如下:

其中f代表RNN,I为图像子块行数(图像被分割成IxJ块),o是结果,z为之前的状态,p为子图块内的像素点。


给定输入图像后,ReSeg首先用预训练好的VGG-16提取图像的特征,随后开始应用基于SeNet的网络结构进行分割任务。具体网络结构如下图所示:

从网络结构可以看出,ReSeg应用了3次串联的完整ReNet模块,空间分辨率在这个过程中逐渐减小。这么做的目的是,将VGG-16提取的特征进行进一步的处理,从而得到对输入图像更复杂的特征描述。


特征提取结束后,特征图对输入图像的空间分辨率下降为1/8,因此需要恢复空间分辨率以得到稠密的分割结果。因此,在所有ReNet模块结束后,ReSeg应用了若干层由反卷积组成的上采样层,将特征图的空间分辨率恢复成原始输入图像的空间分辨率。


最后,简单应用softmax实现分割。


3 实验结果

ReSeg的实验用到了三个数据库,分别是Weizmann Horses、Oxford Flowers和CamVid。其中,前两个数据库比CamVid要容易一些,因此这里只讨论CamVid下ReSeg的表现,感兴趣的读者可以移步原文看ReSeg在其他数据库下的实验结果。


下表是ReSeg在CamVid数据库下对不同类别的分割结果以及与其他算法的效果比较。

下图是ReSeg在CamVid下的分割结果图:

从左到右:输入、真值、ReSeg结果、带类别平衡的ReSeg结果


本专栏作者维护的深度学习图像分割星球上线了,欢迎大家参与学习与讨论

总结


尽管ReNet和ReSeg的提出时间较早,分割效果相比较state-of-the-art算法也略有不足。但是,其提供的模型设计与卷积操作上的思路是非常新颖的,同时也巧妙地用GRU解决了RNN梯度消失问题,因此对于分割任务的网络设计具有一定的启发性作用。


下期我们继续RNN的讨论,看看如何在ReNet的基础上处理长程上下文信息下的分割问题。下回见!


今晚直播


今日看图猜技术


有三AI生态


更多精彩内容请关注知乎专栏《有三AI学院》


转载文章请后台联系

侵权必究


往期精选


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存